package simple.runtime.components;

import simple.runtime.annotations.SimpleComponent;
import simple.runtime.annotations.SimpleEvent;
import simple.runtime.annotations.SimpleFunction;
import simple.runtime.annotations.SimpleObject;

/**
 * 消息处理。
 * 
 * @author 东子 xhwsd@qq.com
 */
@SimpleComponent
@SimpleObject
public interface 消息处理 extends 组件 {

  /**
   * 收到消息处理方法。
   * 
   * @param msg 消息对象
   */
  @SimpleEvent
  void 收到消息(Object msg);

  /**
   * 创建消息对象。
   * 
   * @return 消息对象。
   */
  @SimpleFunction
  Object 创建消息();

  /**
   * 生成消息对象。
   * 
   * @param what 消息标记值。
   * @return 消息对象。
   */
  @SimpleFunction
  Object 生成消息(int what);

  /**
   * 取消息的标记值。
   * 
   * @param msg 消息对象。
   * @return 标记值。
   */
  @SimpleFunction
  int 取消息标记(Object msg);

  /**
   * 设置信息的标记值。
   * 
   * @param msg 消息对象。
   * @param what 标记值。
   */
  @SimpleFunction
  void 置消息标记(Object msg, int what);

  /**
   * 获取消息的参数1值。
   * 
   * @param msg 消息对象。
   * @return 参数1值。
   */
  @SimpleFunction
  int 取消息参数1(Object msg);

  /**
   * 设置消息的参数1值。
   * 
   * @param msg 消息对象。
   * @param value 参数1值。
   */
  @SimpleFunction
  void 置消息参数1(Object msg, int value);

  /**
   * 获取消息的参数2值。
   * 
   * @param msg 消息对象。
   * @return 参数2值。
   */
  @SimpleFunction
  int 取消息参数2(Object msg);

  /**
   * 设置消息的参数2值。
   * 
   * @param msg 消息对象。
   * @param value 参数2值。
   */
  @SimpleFunction
  void 置消息参数2(Object msg, int value);

  /**
   * 获取消息的对象值。
   * 
   * @param msg 消息对象。
   * @return 对象值。
   */
  @SimpleFunction
  Object 取消息对象(Object msg);

  /**
   * 设置消息的对象值。
   * 
   * @param msg 消息对象。
   * @param obj 对象值。
   */
  @SimpleFunction
  void 置消息对象(Object msg, Object obj);

  /**
   * 发送消息给当前消息处理器。
   * 
   * @param msg 消息对象
   * @return 成功返回{@code true}，否则返回{@code false}
   */
  @SimpleFunction
  boolean 发送消息(Object msg);
}
